
package modelo.dao.impl;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import modelo.dao.inter.IGrupoDAO;
import modelo.dto.Grupo;

public class GrupoImpl extends GenericoImpl implements IGrupoDAO {
	
    public GrupoImpl(Connection conn) {
		super(conn);
	}

	@Override
    public boolean cadastrar(Object obj) throws SQLException {
    	Grupo grupo = (Grupo) obj;
        
        super.sql = "INSERT INTO grupo(nome_grupo) VALUES(?)";
        
        try {
            super.pstm =super.conn.prepareStatement(super.sql);
            super.pstm.setString(1, grupo.getNomeGrupo());
            
            super.efetuou = !super.pstm.execute();
            
            super.conn.commit();
                                   
        } 
        catch (SQLException e) {
        	super.conn.rollback();
        	e.printStackTrace();
            System.out.println("Erro: "+e.getMessage());
            throw new SQLException(e.getMessage());
        }
        
        return super.efetuou;
    }

    @Override
    public boolean atualizar(Object obj) throws SQLException {
    	Grupo Grupo = (Grupo) obj;
        
        super.sql = "UPDATE grupo SET nome_grupo= ? WHERE id_grupo= ?";
        
        try {                        
            super.pstm = super.conn.prepareStatement(super.sql);
            super.pstm.setString(1, Grupo.getNomeGrupo());
            super.pstm.setInt(2, Grupo.getCodigo());
            
            super.efetuou = !super.pstm.execute();
            
            super.conn.commit();
        } 
        catch (SQLException e) {
        	super.conn.rollback();
        	e.printStackTrace();
            System.out.println("Erro: "+e.getMessage());
            throw new SQLException(e.getMessage());
        }
        
        return super.efetuou;
    }

    @Override
    public boolean excluir(Object obj) throws SQLException {
    	Grupo Grupo = (Grupo) obj;
        
        super.sql = "DELETE FROM grupo WHERE id_grupo= ?";
        
        try {                        
            super.pstm = super.conn.prepareStatement(super.sql);
            super.pstm.setInt(1, Grupo.getCodigo());
            
            super.efetuou = !super.pstm.execute();
            
            super.conn.commit();
        } 
        catch (SQLException e) {
        	super.conn.rollback();
        	e.printStackTrace();
            System.out.println("Erro: "+e.getMessage());
            throw new SQLException(e.getMessage());
        }
        
        return super.efetuou;
    }

    @Override
    public List<Grupo> buscarTodos() throws SQLException {
    	List<Grupo> listGrupos = new ArrayList<Grupo>();        
        Grupo Grupo = null;
        
        super.sql = "SELECT * FROM grupo ORDER BY nome_grupo ASC";
        
        try {
            super.pstm = super.conn.prepareStatement(super.sql);            
            super.res = super.pstm.executeQuery();
            super.conn.commit();
                                  
            while(super.res.next()) {
            	Grupo = new Grupo();
                Grupo.setCodigo(super.res.getInt("id_grupo"));
                Grupo.setNomeGrupo(super.res.getString("nome_grupo"));
                
                listGrupos.add(Grupo);                                                                            
            }                                   
        } 
        catch (SQLException e) {
        	super.conn.rollback();
        	e.printStackTrace();        	        	
            System.out.println("Erro: "+e.getMessage());
            throw new SQLException(e.getMessage());
        }
        
        return listGrupos;
    }

    @Override
    public Grupo getObjetoById(Object obj) throws SQLException {
    	Grupo grupo = (Grupo) obj;
        
        super.sql = "SELECT * FROM grupo WHERE id_grupo= ? ORDER BY nome_grupo ASC";
        
        try {                        
            super.pstm=super.conn.prepareStatement(super.sql);            
            super.pstm.setInt(1, grupo.getCodigo());
            
            super.res = super.pstm.executeQuery();
            
            super.conn.commit();
            
            if(super.res.next()){
            	            	            
                grupo = new Grupo(super.res.getInt("id_grupo"), super.res.getString("nome_grupo"));
                
                //Grupo.setCodigo(super.getRes().getInt("id_Grupo"));
                //Grupo.setDescricao(super.getRes().getString("descricao"));                                
            }            
            
        } 
        catch (SQLException e) {        	
        	super.conn.rollback();
            System.out.println("Erro: "+e.getMessage());
            throw new SQLException(e.getMessage());
        }
        
        return grupo;
    }

    @Override
    public List<Grupo> buscarByNomeGrupo(Grupo grupo) throws SQLException {
    	List<Grupo> grupos = new ArrayList<Grupo>();
    	
        super.sql = "SELECT * FROM grupo WHERE nome_grupo LIKE ? ORDER BY nome_grupo";
        
        try {
            super.pstm = super.conn.prepareStatement(super.sql);
            super.pstm.setString(1, grupo.getNomeGrupo()+"%");
            
            super.res = super.pstm.executeQuery();
            
            System.out.println(super.pstm.toString());
            
            super.conn.commit();
            
            while(super.res.next()) {
            	Grupo grup = new Grupo();
                grup.setCodigo(super.res.getInt("id_grupo"));
                grup.setNomeGrupo(super.res.getString("nome_grupo"));
                
                grupos.add(grup);
            }
            
        }
        catch (SQLException e) {
        	super.conn.rollback();
        	e.printStackTrace();
            System.out.println("Erro: "+e.getMessage());
            throw new SQLException(e.getMessage());
        }
        
        return grupos;
    }

}
